﻿// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

namespace MyDemo.Application.RequestRespont;

/// <summary>
/// 反馈状态地址
/// </summary>
public class RgvFeedback
{


    #region RGV反馈状态地址表
    /// <summary>
    /// RGV指令状态位
    /// </summary>
    /// &lt;summary&gt;
    /// RGV的指令状态
    /// &lt;/summary&gt;
    public static RgvCommandStatusEnum RgvCommandStatus { get; set; }
    /// <summary>
    /// 当前二维码
    /// </summary>
    /// &lt;summary&gt;
    /// 当前扫描到的二维码码值，0表示未扫描到
    /// &lt;/summary&gt;
    public ushort CurrentQrCode { get; set; }
    /// <summary>
    /// 电池电量值
    /// </summary>
    /// &lt;summary&gt;
    /// 电池电量，范围0 - 100.0%单位0.1 读取int 除10
    /// &lt;/summary&gt;
    public ushort BatteryPower { get; set; }
    /// <summary>
    /// 电池温度
    /// </summary>
    /// &lt;summary&gt;
    /// 电池温度，范围0 - 100.0度
    /// &lt;/summary&gt;
    public ushort BatteryTemperature { get; set; }
    /// <summary>
    /// RGV错误编号
    /// </summary>
    /// &lt;summary&gt;
    /// RGV的错误编号
    /// &lt;/summary&gt;
    public RgvErrorNumberEnum RgvErrorNumber { get; set; }
    /// <summary>
    /// Bit-1 顶升位 1处于顶升位，0不处于 Bit-2 换向位 1 处于换向位，0不处于
    ///  Bit-3  中间位1 处于中间位，0不处于。Bit-4 充电位 1充电打开状态，0充电处于关闭状态 
    /// Bit-5 电池反馈充电状态 1为充电打开 0为充电关闭
    /// </summary>
    public ushort RgvLiftingAndChargingStatus { get; set; }
    /// <summary>
    /// RGV错误信息码
    /// </summary>
    /// &lt;summary&gt;
    /// RGV的错误信息码
    /// &lt;/summary&gt;
    public ushort RgvErrorInfoCode { get; set; }
    /// <summary>
    /// 雷达及托盘开关状态位
    /// </summary>
    /// &lt;summary&gt;
    /// 雷达及托盘开关的状态
    /// &lt;/summary&gt;
    public ushort RadarAndTraySwitchStatus { get; set; }
    /// <summary>
    /// 二维码X方向偏移量
    /// </summary>
    /// &lt;summary&gt;
    /// 二维码在X方向的偏移量，范围 - 200 - 200mm
    /// &lt;/summary&gt;
    public ushort QrCodeXOffset { get; set; }
    /// <summary>
    /// 二维码Y方向偏移量
    /// </summary>
    /// &lt;summary&gt;
    /// 二维码在Y方向的偏移量，范围 - 200 - 200mm
    /// &lt;/summary&gt;
    public ushort QrCodeYOffset { get; set; }
    /// <summary>
    /// 电池电压值
    /// </summary>
    /// &lt;summary&gt;
    /// 电池电压，单位0.1V0无效 （单位0.1V），读取int值，除以100
    /// &lt;/summary&gt;
    public ushort BatteryVoltage { get; set; }
    /// <summary>
    /// 当前的高度值
    /// </summary>
    /// &lt;summary&gt;
    /// 顶升伺服的当前位置，范围0 - 9000
    /// &lt;/summary&gt;
    public ushort CurrentHeight { get; set; }
    #endregion


    /// <summary>
    /// 定义PLC地址映射表
    /// </summary>
    private static readonly Dictionary<string, string> PlcAddressMap = new Dictionary<string, string>
    {
         { nameof(RgvCommandStatus),"Wm200" },
         { nameof(CurrentQrCode),"Wm201" },
        { nameof(BatteryPower),"Wm202" },
        { nameof(BatteryTemperature), "Wm203" },
        { nameof(RgvErrorNumber),"Wm204" },
        { nameof(RgvLiftingAndChargingStatus),"Wm205" },
        { nameof(RgvErrorInfoCode),"Wm206" },
        { nameof(RadarAndTraySwitchStatus),"Wm207" },
        { nameof(QrCodeXOffset),"Wm209" },
        { nameof(QrCodeYOffset),"Wm210" },
        { nameof(BatteryVoltage),"Wm211" },
        { nameof(CurrentHeight),"Wm212" },


        #region RGV反馈任务状态地址表
        
        { nameof(RgvTaskStatusInfo.RgvTaskNumber), "Wm0313" },
        { nameof(RgvTaskStatusInfo.RgvTaskType), "Wm0314" },
        { nameof(RgvTaskStatusInfo.RgvTaskStatus), "Wm0315" },
        { nameof(RgvTaskStatusInfo.RgvWorkStatus), "Wm0316" },
        #endregion

        #region 正常行驶的指令

	    #endregion
    };


    /// <summary>
    /// 获取Rgv反馈 PLC地址
    /// </summary>
    /// <param name="propertyName">属性名称</param>
    /// <returns>PLC地址</returns>
    public static string GetPlcAddressRgv(string propertyName)
    {
        if (PlcAddressMap.TryGetValue(propertyName, out string address))
        {
            return address;
        }
        return null;
    }

}

#region RGV反馈任务状态地址表
/// <summary>
/// 反馈任务状态地址表
/// </summary>
public class RgvTaskStatusInfo
{
    // RGV任务号
    /// <summary>
    /// RGV当前执行的任务号
    /// </summary>
    public ushort RgvTaskNumber { get; set; }

    // RGV执行的任务类型
    /// <summary>
    /// RGV执行的任务类型
    /// 1 - 空车移动
    /// 2 - 载货移动
    /// 3 - 充电
    /// 4 - 临时停车
    /// 5 - 继续行驶
    /// </summary>
    public RgvTaskTypeEnum RgvTaskType { get; set; }

    // RGV任务状态
    /// <summary>
    /// RGV任务状态
    /// 1 - 任务完成
    /// 2 - 任务执行中
    /// 3 - 任务出错
    /// </summary>
    public RgvTaskStatusEnum RgvTaskStatus { get; set; }

    // RGV工作状态
    /// <summary>
    /// RGV工作状态
    /// 0 - 空闲
    /// 1 - 任务工作中
    /// </summary>
    public RgvWorkStatusEnum RgvWorkStatus { get; set; }
}


#endregion

// 定义RGV任务类型的枚举
public enum RgvTaskTypeEnum : ushort
{
    空车移动 = 1,
    载货移动 = 2,
    充电 = 3,
    临时停车 = 4,
    继续行驶 = 5
}

// 定义RGV任务状态的枚举
public enum RgvTaskStatusEnum : ushort
{
    任务完成 = 1,
    任务执行中 = 2,
    任务出错 = 3
}

// 定义RGV工作状态的枚举
public enum RgvWorkStatusEnum : ushort
{
    空闲 = 0,
    任务工作中 = 1
}









/// <summary>
/// 正常行驶指令表
/// </summary>
public class NormalDrivingInstruction
{

    /// <summary>
    /// 控制指令字
    /// 1：表示正常行驶指令
    /// </summary>
    public ushort ControlCommandWord { get; set; }


    /// <summary>
    /// 起始二维码码值
    /// 示例值：10（表示起始二维码为10）
    /// </summary>
    public ushort StartQrCodeValue { get; set; }

    // 中间二维码码值
    /// <summary>
    /// 中间二维码码值
    /// 示例值：0（表示无中间二维码）
    /// </summary>
    public ushort MiddleQrCodeValue { get; set; }

    // 目标二维码码值
    /// <summary>
    /// 目标二维码码值
    /// 示例值：11（表示终点二维码为11）
    /// </summary>
    public ushort TargetQrCodeValue { get; set; }

    // 起点到目标点的距离长度
    /// <summary>
    /// 起点到目标点的距离长度
    /// 示例值：1185（表示全场距离1185mm）
    /// </summary>
    public int DistanceToTarget { get; set; }

    // 中间点到目标点的距离长度
    /// <summary>
    /// 中间点到目标点的距离长度
    /// 示例值：0（没有中间二维码，中间二维码到终点的距离都是0）
    /// </summary>
    public int DistanceFromMiddleToTarget { get; set; }

    // 小车运行方向
    /// <summary>
    /// 小车运行方向
    /// 示例值：2（表示运行方向为2对应X-）
    /// </summary>
    public ushort CarRunningDirection { get; set; }

    // 小车运行速度
    /// <summary>
    /// 小车运行速度
    /// 示例值：2200（表示此次运行速度为2200）
    /// </summary>
    public ushort CarRunningSpeed { get; set; }

    // 指令结束位
    /// <summary>
    /// 指令结束位
    /// 示例值：1（所有指令必填项）
    /// </summary>
    public ushort InstructionEndBit { get; set; }
}
